目前標籤頁面的畫面及功能已經完成,接下來繼續新增「重複」頁面,算是再熟悉一下TableView的使用。
一樣新增一個ViewController,並命名為「RepeatAlarmViewController」。
之後我們看一下IPhone內建鬧鐘的「重複」頁面長什麼樣子。
有七個外觀長的一模一樣的長方體,當遇到很多長一樣的長方體時,就可以使用TableView來實作它。
class RepeatAlarmTableViewCell: UITableViewCell {
// 設定 RepeatAlarmTableViewCell的識別碼
static let identifier = "repeatAlarmTableViewcCell"
// MARK: - IBOutLets
let titleLabel: UILabel = {
let label = UILabel()
label.textColor = .white
return label
}()
// MARK: - Init
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.backgroundColor = #colorLiteral(red: 0.1333159506, green: 0.1333458424, blue: 0.1419014633, alpha: 1)
setViews()
setLayouts()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - setViews
func setViews() {
// 將titleLabel加進這個TableViewCell內
self.addSubview(titleLabel)
}
// MARK: - setLayouts
func setLayouts() {
titleLabel.snp.makeConstraints { make in
// titleLabel的頂部,底部,左邊都貼齊TableViewCell
make.top.bottom.equalTo(self)
// titleLabel的左邊貼齊TableViewCell的左邊間隔10
make.leading.equalTo(self).offset(10)
}
}
}
那整個「RepeatAlarmViewController」會像以下:
class RepeatAlarmViewController: UIViewController {
// MARK: - Properties
let titleDatas: [String] = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六",]
// MARK: - IBLayOuts
let repeatTableView: UITableView = {
let tableView = UITableView()
// 註冊Cell
tableView.register(RepeatAlarmTableViewCell.self, forCellReuseIdentifier: RepeatAlarmTableViewCell.identifier)
tableView.bounces = false
return tableView
}()
// MARK: - Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
initView()
setViews()
setLayouts()
}
// MARK: - Function
func initView() {
// 設定navigationBar上面的文字
self.title = "重複"
// 設定navigation BackButton Color
self.navigationController?.navigationBar.tintColor = .orange
// 設定該ViewController的背景色
self.view.backgroundColor = #colorLiteral(red: 0.1097886786, green: 0.1098149046, blue: 0.1183715835, alpha: 1)
self.repeatTableView.delegate = self
self.repeatTableView.dataSource = self
}
func setViews() {
self.view.addSubview(repeatTableView)
}
func setLayouts() {
repeatTableView.snp.makeConstraints { make in
make.top.equalTo(self.view.safeAreaLayoutGuide).offset(50)
make.centerX.equalTo(self.view)
make.width.equalTo(self.view)
make.height.equalTo(350)
}
}
}
extension RepeatAlarmViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return titleDatas.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: RepeatAlarmTableViewCell.identifier, for: indexPath) as? RepeatAlarmTableViewCell else { return UITableViewCell() }
cell.titleLabel.text = titleDatas[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 50
}
}
最後呢,到「AddAlarmViewController」內,變更一下TableView - didSelectRowAt()
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.row {
// 點擊第一欄時,要做什麼
case 0:
let vc = RepeatAlarmViewController()
self.navigationController?.pushViewController(vc, animated: true)
// 點擊第二欄時,要做什麼
case 1:
let vc = AlarmLabelViewController()
// 讓AddAlarmViewController成為
// AlarmLabelViewController的updateAlarmLabelDelegate的執行者
vc.updateAlarmLabelDelegate = self
// 使用navigationController的pushViewController(),達到畫面由右至左的效果。
self.navigationController?.pushViewController(vc, animated: true)
// 點擊第三欄時,要做什麼
case 2:
break
// 點擊第四欄時,要做什麼
case 3:
break
default:
break
}
}
那現在程式應該會長這樣子